package com.rx.core.dbase;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.rx.core.base.RxBaseData;
import com.rx.core.dbase.mutil.param.*;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 所有版权归 广西梧州 陈锦韬 所有
 *
 * @version V1.0
 * @Title: RxBaseMapper
 * @Package com.rx.core.dbase
 * @Description: 数据库操作
 * @author: 陈锦韬
 * @date: 2021\6\10 0010
 * @Copyright: 2021 陈锦韬  All rights reserved.
 */
public interface RxBaseMapper<T> extends BaseMapper<T> {
    /**
     * 列表查询
     * @param data
     * @return
     */
    List<T> searchList(@Param("data") RxBaseData data);

    /**
     * 定位查询
     * @param data
     * @return
     */
    T search(@Param("data") RxBaseData data);

    /**
     * 逻辑删除
     * @param data
     * @return
     */
    Integer delete(@Param("data") RxBaseData data);

    /**
     * 新增
     * @param data
     * @return
     */
    Integer append(@Param("data") RxBaseData data);

    /**
     * 更新
     * @param data
     * @return
     */
    Integer update(@Param("data") RxBaseData data);

    /**
     * 记录数查询
     * @param data
     * @return
     */
    Integer count(@Param("data") RxBaseData data);

    /**
     * 获取最新一条记录
     * @param data
     * @return
     */
    T latest(@Param("data") RxBaseData data);

    /**
     * 统计
     * @param data
     * @return
     */
    List<T> statis(@Param("data") RxBaseData data);

    /**
     * 批量插入
     * @return
     */
    int batchAppend(@Param("list") List<T> list);
    /**
     * 批量插入
     * @param entityList
     * @return
     */
    int batchInsert(List<T> entityList);

    /**
     * 批量更新
     * @return
     */
    int batchUpdateNoXml(@Param("list") List<T> list);
    /**
     * 批量更新
     * @param entityList
     * @return
     */
    int batchUpdate(List<T> entityList);

    /**
     * 批量删除
     * @return
     */
    int batchDeleteNoXml(@Param("list") List<T> list);
    /**
     * 批量删除
     * @param entityList
     * @return
     */
    int batchDelete(List<T> entityList);


    ///////////////////////////////////////////////////////////////////////////

    /**
     * 双表内联
     * @param parameter
     * @return
     */
    List<T> innerSearchList(DoubleInnerParameter parameter);

    /**
     * 双表内联
     * @param parameter
     * @return
     */
    List<T> unionSearchList(DoubleUnionInnerParameter parameter);

    /**
     * 双表内联-分页
     * @param parameter
     * @return
     */
    IPage<T> unionSearchPage(IPage<T> page, DoubleUnionInnerParameter parameter);
    /**
     * 双表左联
     * @param parameter
     * @return
     */
    List<T> unionLeftSearchList(DoubleUnionLeftParameter parameter);

    /**
     * 双表左联-分页
     * @param parameter
     * @return
     */
    IPage<T> unionLeftSearchPage(IPage<T> page, DoubleUnionLeftParameter parameter);
    /**
     * 双表左连接
     * @param parameter
     return
     */
    List<T> leftSearchList(DoubleLeftJoinParameter parameter);


    /**
     * 双表内联分页
     * @param page
     * @param parameter
     * @return
     */
    IPage<T> innerSearchPage(IPage<T> page, DoubleInnerParameter parameter);

    /**
     * 双表左联分页
     * @param page
     * @param parameter
     * @return
     */
    IPage<T> leftSearchPage(IPage<T> page, DoubleLeftJoinParameter parameter);

    /**
     * 拷贝插入
     * @param parameter
     * @return
     */
    Integer copyInsert(DoubleCopyInsertParameter parameter);


    //////////////////////////////////////////////////////////////////////////

    /**
     * 三表内联
     * @param parameter
     * @return
     */
    List<T> threeInnerSearchList(ThreeInnerParameter parameter);
    /**
     * 三表内左联
     * @param parameter
     * @return
     */
    IPage<T> threeInnerLeftPage(IPage<T> page, ThreeInnerLeftPageParameter parameter);
}
